This repository has been archived by the owner on Jul 14, 2023. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
My name is Timothy Wu and I'm the current team lead for the Gossamer project, a Go implementation of the Polkadot host. I have been contributing to Gossamer since May of 2021. I started out as an individual contributor on the team as I ramped up my knowledge of the Polkadot protocol, Substrate, and the tooling provided by the ecosystem. I've since been promoted to the team lead position, which is both a management/career development role and technical lead role.
During my time working on Gossamer I've contributed to different parts of the codebase. I accepted the challenge to overhaul our existing SCALE implementation. A lot of the existing encoding and decoding code in Gossamer was quite custom and repetitive. The approach I took was more along the lines of building a generic serde using reflection, which would support primitive and complex types, as well as custom types. The translation between the primitive and complex types in Go align quite well with type system of Rust, but Go does not directly support enums, results, and options. With the overhauled scale package, we introduced
scale.VaryingDataType
andscale.Result
types which map to a Rust enum and result.I also was focused on setting up our CI infrastructure to allow us to continuously update our staging setup, which are non-authority syncing nodes with the latest development build. Metric collection, alarms and visualisation is also setup so we can continually monitor these nodes. I was also focused on setting up a local development environment using docker and docker-compose to test the Gossamer node in ephemeral devnets usually in a 3 node environments, both in a Gossamer only configuration as well as an interoperable configuration with Substrate nodes. I was responsible for the devops work to run long running devnets in the cloud for both Gossamer only and interoperable configurations.
Most of my time these days is spent providing technical leadership by reviewing the majority of the contributions from the engineers on the team. I'm reviewing the spec and substrate codebase which allows me to be a technical resource when it comes to BABE, GRANDPA, the trie, and the networking stack. I continue to focus on fostering a collaborative work environment here on the Gossamer team, as well as teaching and implementing Go best practices.
I've really enjoyed my time working in the Polkadot ecosystem. As the team lead of Gossamer I have to provide technical updates on the project during our calls with W3F and it's been a great working relationship. I hope to continue learning and growing in this ecosystem and to help improve client diversity. Given my experience, I am requesting to join the Fellowship at rank 1.
Notable contributions:
SCALE
scale.Decoder
and update lib/trie integration ChainSafe/gossamer#1896VaryingDataType
types ChainSafe/gossamer#2612Devnet
gssmr
devnet on AWS ECS ChainSafe/gossamer#2096State
BlockState.tries
ChainSafe/gossamer#2341Network
Metrics
W3F Spec